package com.tdam2011.grupo06.gui;

import java.util.ArrayList;
import java.util.GregorianCalendar;

import android.app.Dialog;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.tdam2011.grupo06.R;
import com.tdam2011.grupo06.control.DatabaseHelper;
import com.tdam2011.grupo06.control.GestorPresentacionContacto;
import com.tdam2011.grupo06.model.Contacto;
import com.tdam2011.grupo06.model.Email;
import com.tdam2011.grupo06.model.ItemEmail;
import com.tdam2011.grupo06.model.Telefono;

public class PresentacionContacto extends ListActivity implements OnClickListener
{
	private ItemAdapter adapter;
	private LinearLayout linearLay;
	private int idContacto;
	private Contacto contactoAMostrar;
	private CargarPresenctacionContactoTask cargarPresenctacionContactoTask;
	private GestorPresentacionContacto gestorPresentacionContacto;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.contacto_presentacion);
		adapter = new ItemAdapter();
		linearLay = (LinearLayout) findViewById(R.id.linearLayoutPresentacionContacto);
		
		setListAdapter(adapter);
		idContacto = getIntent().getExtras().getInt("idContacto");
		gestorPresentacionContacto = new GestorPresentacionContacto(adapter, this);
		cargarPresenctacionContactoTask = new CargarPresenctacionContactoTask();
		
		ImageButton img = (ImageButton) findViewById(R.id.imageViewPresentacionMensajeWeb);
		img.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Contacto c = new Contacto(idContacto);
				DatabaseHelper db = DatabaseHelper.getInstance(PresentacionContacto.this);
				if(!db.existsContactByDBId(c))
				{
					showDialog(1);
				}
				else
				{
					c = db.getContactByDBId(c);
					if(c.getUsuario()==null)
					{
						showDialog(1);
					}
					else
					{
						c = db.getContactByDBId(c);
						startActivity(new Intent(PresentacionContacto.this, ListadoMensajesBob.class).putExtra("nombreUsuario", c.getUsuario()).putExtra("idContacto", c.getTableID()));
					}
				}
				
			}
		});
		
		cargarPresenctacionContactoTask.execute("");
	}
	
	public class ItemAdapter extends BaseAdapter 
	{
		private ArrayList<Object> elements;
		private LayoutInflater inflater;

		public ItemAdapter() 
		{
			elements = new ArrayList<Object>();
			inflater = LayoutInflater.from(PresentacionContacto.this);
		}

		public void addElemetnInfo(Object info) {
			if (info != null) {
				elements.add(info);
			}
		}

		public int getCount() {
			return elements.size();
		}

		public Object getItem(int position) {
			return elements.get(position);
		}

		public long getItemId(int position) {
			return position;
		}

		class Holder 
		{
			private TextView txtTipo;
			private TextView txtNumero;
			private ImageButton imgLlamada;
			private ImageButton imgEmail;
			private ImageButton imgMensaje;
		}

		public View getView(int position, View convertView, ViewGroup arg2) 
		{
			Holder holder;
			if (convertView == null) 
			{
				convertView = inflater.inflate(R.layout.item_contacto_presentacion, null);
				holder = new Holder();
				holder.txtTipo = (TextView) convertView.findViewById(R.id.txtPresentacionTipo);
				holder.txtNumero = (TextView) convertView.findViewById(R.id.txtPresentacionNumero);
				holder.imgLlamada = (ImageButton) convertView.findViewById(R.id.imageViewPresentacionLlamada);
				holder.imgEmail = (ImageButton) convertView.findViewById(R.id.imageViewPresentacionEmail);
				holder.imgMensaje = (ImageButton) convertView.findViewById(R.id.imageViewPresentacionMensaje);
				holder.imgLlamada.setOnClickListener(PresentacionContacto.this);
				holder.imgLlamada.setContentDescription("Llamada");
				holder.imgMensaje.setOnClickListener(PresentacionContacto.this);
				holder.imgMensaje.setContentDescription("Mensaje");
				holder.imgEmail.setOnClickListener(PresentacionContacto.this);
				holder.imgEmail.setContentDescription("Email");
				convertView.setTag(holder);
			} 
			else 
			{
				holder = (Holder) convertView.getTag();
			}

			Object o = getItem(position);
			if(o instanceof Telefono)
			{
				Telefono info = (Telefono) o;
				holder.txtNumero.setText(info.getNumero());
				holder.txtTipo.setText(info.getTipoString(PresentacionContacto.this));
				holder.imgEmail.setVisibility(View.INVISIBLE);
				holder.imgLlamada.setTag(info.getNumero());
				holder.imgMensaje.setTag(info.getNumero());
			}
			else if(o instanceof Email)
			{
				Email info = (Email) o;
				holder.txtNumero.setText(info.getMail());
				holder.txtTipo.setText(info.getTipoString(PresentacionContacto.this));
				holder.imgLlamada.setVisibility(View.GONE);
				holder.imgMensaje.setVisibility(View.GONE);
				holder.imgEmail.setTag(info.getMail());
				
				//Codigo para emparejar iconos (no tocar)
				LayoutParams lay = (LayoutParams) ((LinearLayout)holder.txtNumero.getParent()).getLayoutParams();
				lay.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 282, getResources().getDisplayMetrics());
				lay = (LayoutParams) holder.imgEmail.getLayoutParams();
				lay.width = LayoutParams.MATCH_PARENT;
				lay.setMargins(0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()), 0, 0);
			}
			return convertView;
		}

	}

	public void onClick(View v) 
	{
		
		if(v.getContentDescription().toString().compareTo("Llamada")==0)
		{
			String url = "tel:"+v.getTag().toString();
			Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
			startActivity(intent);

		}
		else if(v.getContentDescription().toString().compareTo("Mensaje")==0)
		{
			String url = "smsto:"+v.getTag().toString();
			Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
			intent.putExtra("compose_mode", true);
	        startActivity(intent);
		}
		else
		{
			DatabaseHelper db = DatabaseHelper.getInstance(this);
			if(contactoAMostrar.getTableID()==0){
				contactoAMostrar = db.getContactByDBId(contactoAMostrar);
			}
			ItemEmail ie = new ItemEmail(0, contactoAMostrar.getTableID(), 2, GregorianCalendar.getInstance().getTime(), v.getTag().toString(), contactoAMostrar.getNombre());			
			if(!db.existsContactByDBId(contactoAMostrar))
			{
				db.addContacts(contactoAMostrar);
			}
			db.addEmail(ie);
			Intent intent = new Intent(Intent.ACTION_SEND); 
			intent.setType("plain/text");
			intent.putExtra(Intent.EXTRA_EMAIL, new String[]{v.getTag().toString()}); 
			startActivity(Intent.createChooser(intent, getResources().getString(R.string.selec_ap_mail)));
		}
	}
	
	@Override
	protected void onResume() {
		super.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
	}

	@Override
	protected void onStop() {
		super.onStop();
	}
	
	protected Dialog onCreateDialog(int id) 
	{
		Dialog dialog = null;
		if (id == 1)
		{
			dialog = createCustomDialog();
		}
		else 
		{
			dialog = super.onCreateDialog(id);
		}
		return dialog;
	}
	
	private Dialog createCustomDialog() {
		final Dialog dialog = new Dialog(this);
		dialog.setContentView(R.layout.custom_dialog);
		dialog.setTitle(getResources().getString(R.string.tituloDialogo));

		final EditText textUsuario = (EditText) dialog.findViewById(R.id.dialogTxtNombre);
		Button btnAceptar = (Button) dialog.findViewById(R.id.dialogBtnAceptar);
		Button btnCancelar = (Button) dialog.findViewById(R.id.dialogBtnCancelar);
		
		btnAceptar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) 
			{
				Contacto c = new Contacto(idContacto);
				c.setUsuario(textUsuario.getText().toString());
				DatabaseHelper db = DatabaseHelper.getInstance(PresentacionContacto.this);
				if(!db.existsContactByDBId(c))
				{
					db.addContacts(c);
				}
				else
				{
					db.updateUserByDBId(c);
				}
				c = db.getContactByDBId(c);
				startActivity(new Intent(PresentacionContacto.this, ListadoMensajesBob.class).putExtra("nombreUsuario", c.getUsuario()).putExtra("idContacto", c.getTableID()));
				dialog.dismiss();
			}
		});
		
		btnCancelar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				dialog.dismiss();
			}
		});

		return dialog;
	}
	
	private class CargarPresenctacionContactoTask extends AsyncTask<String, Void, Contacto>
	{
		@Override
		protected Contacto doInBackground(String... params) 
		{
			return gestorPresentacionContacto.cargarContacto(idContacto);
		}
		
		protected void onPostExecute(Contacto result)
		{
			contactoAMostrar = result;
			((TextView) findViewById(R.id.txtPresentacionNombre)).setText(result.getNombre());
			((ImageView) findViewById(R.id.imageViewPresentacionImagen)).setImageURI( result.getPhotoUri() );
			adapter.notifyDataSetChanged();
			linearLay.setVisibility(View.GONE);
		}
	}
}
